package com.banesco.precargadepositos.interfaz.componentes;
import net.rim.device.api.system.Characters;
import net.rim.device.api.system.DeviceInfo;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.TextField;

/**
 * Control para los campos de texto personalizados
 * @author maguca
 *
 */
public class CampoTexto extends BasicEditField {

	private Field nextFieldForFocus = null;


	/**
	 * Variable que posee las propiedades de la fuente del sistema
	 */
    private Font _defaultFont;
    
    
    /**
     * Variable que posee le maximo de caracteres que posee campo
     */
    private int _maxCaracter;
    
    
    /**
     * Constructor de la clase para solo el maximo de caracteres y el stylo
     * @param maxCaracter cantidad maxima de caracteres
     * @param style stilo del campo de texto
     */
    public CampoTexto(int maxCaracter,long style){
    	super("","",maxCaracter,style| Field.FIELD_VCENTER |TextField.NO_NEWLINE | Field.FOCUSABLE);
    	_defaultFont = Font.getDefault();
    	_maxCaracter = maxCaracter;
    }
    
    
    /**
     * Metodo que retorna el ancho preferido del campo de texto
     */
    public int getPreferredWidth() {
    	_defaultFont = Font.getDefault();
    	
    	String text = "0";
    	for(int i = 0; i < _maxCaracter; i++)
    	 text = text + "0";
    	return _defaultFont.getAdvance(text);
    }

    
    /**
     * Metodo que retorna el alto preferido del campo de texto
     */
    public int getPreferredHeight() {
    	int retorno = (int) (getFont().getHeight() * 1.6);
        return retorno;
    }

    
    /**
     * Metodo que personaliza el alto y ancho del campo de texto
     */
    public void layout(int width, int height) {
    	width = getPreferredWidth();
    	height = getPreferredHeight();
        super.layout(width, height);
        setExtent(width, height);
    }
            
    
    /**
     * Metodo que renderiza el control con las propiedades personalizadas
     */
    public void paint(Graphics g) {   
        int fieldHeight =  getHeight();
    	int fontHeight = getFont().getHeight() + 5;
        g.setColor(0x000000);
        int ancho = getWidth();
        if(DeviceInfo.getSoftwareVersion().charAt(0) != '7')
        	ancho = getWidth()* 7/8;


    	super.paint(g);
    	g.clear(); 
    	if (this.isFocus()) {
    	    g.setBackgroundColor( Color.LAWNGREEN );
    	  } else {
    	    g.setBackgroundColor( Color.WHITE );
    	  }
        g.drawRoundRect(0, 0, ancho, getHeight(), 15, 15);    
    	g.drawText(getText() ,5 , (fieldHeight-fontHeight)/2);	
    }
    

    public boolean keyChar(char key, int status, int time) {
        // Prevent new lines in input field.
        if (Characters.ENTER == key) {
            if (this.nextFieldForFocus != null) {
                this.nextFieldForFocus.setFocus();
            }
            return true;
        } else {
            return super.keyChar(key, status, time);
        }
    }
    
    protected void onFocus(int direction) {
        super.onFocus(direction);
        this.setCursorPosition(this.getTextLength());
        invalidate();
    }
    
    protected int moveFocus(int amount, int status, int time) {
    
    	return 1;
	}
}
